# """
# This is the interface that allows for creating nested lists.
# You should not implement it, or speculate about its implementation
# """
# class NestedInteger:
#    def __init__(self, value=None):
#        """
#        If value is not specified, initializes an empty list.
#        Otherwise initializes a single integer equal to value.
#        """
#
#    def isInteger(self):
#        """
#        @return True if this NestedInteger holds a single integer, rather than a nested list.
#        :rtype bool
#        """
#
#    def add(self, elem):
#        """
#        Set this NestedInteger to hold a nested list and adds a nested integer elem to it.
#        :rtype void
#        """
#
#    def setInteger(self, value):
#        """
#        Set this NestedInteger to hold a single integer equal to value.
#        :rtype void
#        """
#
#    def getInteger(self):
#        """
#        @return the single integer that this NestedInteger holds, if it holds a single integer
#        Return None if this NestedInteger holds a nested list
#        :rtype int
#        """
#
#    def getList(self):
#        """
#        @return the nested list that this NestedInteger holds, if it holds a nested list
#        Return None if this NestedInteger holds a single integer
#        :rtype List[NestedInteger]
#        """


class NestedInteger:
    pass


from collections import deque


class Solution:
    def deserialize(self, s: str) -> NestedInteger:
        int_set = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
        fuhao_set = {",", "-", "["}
        zhan = []
        for i in s:
            if i in int_set:
                if zhan and isinstance(zhan[-1], int):
                    if zhan[-1] >= 0:
                        zhan[-1] = zhan[-1] * 10 + int(i)
                    else:
                        zhan[-1] = zhan[-1] * 10 - int(i)
                elif zhan and zhan[-1] == "-":
                    zhan.append(-int(i))
                else:
                    zhan.append(int(i))
            elif i in fuhao_set:
                zhan.append(i)
            else:
                mid_list = deque()
                while zhan and zhan[-1] != "[":
                    mid_list.appendleft(zhan.pop(-1))
                if zhan:
                    zhan.pop(-1)
                mid_res = NestedInteger()
                for j in mid_list:
                    if isinstance(j, int) or isinstance(j, NestedInteger):
                        mid_res.add(j)
                zhan.append(mid_res)
        return zhan[-1]
